### Построитель запросов

Класс `Search` представляет собой построитель запросов в синтаксисе прямого поиска ИРБИС64. В нём имеются следующие статические методы:

* **all()** -- отбор всех документов в базе. Фактически строит запрос `I=$`.

* **equals(prefix, ...)** -- поиск по совпадению с одним из перечисленных значений. Возвращает построитель запросов для последующих цепочечных вызовов.

Экземплярные методы:

* **and_(....)** -- логическое И. Возвращает построитель запросов для последующих цепочечных вызовов.

* **not_(text)** -- логическое НЕ. Возвращает построитель запросов для последующих цепочечных вызовов.

* **or_(...)** -- логическое ИЛИ. Возвращает построитель запросов для последующих цепочечных вызовов.

* **sameField(...)** -- логический оператор "в том же поле". Возвращает построитель запросов для последующих цепочечных вызовов.

* **sameRepeat(...)** -- логический оператор "в том же повторении поля". Возвращает построитель запросов для последующих цепочечных вызовов.

Пример:

```c++
auto expression = Search::equals(L"TJ=", L"Аврора", L"Новый мир")
    .and_(Search::equals(L"G=", L"199$", L"200$"))
    .toString();
```

Поскольку вышеприведённый синтаксис довольно громоздкий, предоставляются следующие функции, значительно упрощающие формирование запроса:

| Функция       | Поиск по 
|---------------|---------
| author        | автору
| bbk           | индексу ББК
| document_kind | виду документа
| keyword       | ключевым словам
| language      | языку текста
| magazine      | заглавию журнала
| mhr           | месту хранения
| number        | инвентарному номеру
| place         | месту издания (городу)
| publisher     | издательству
| rzn           | разделу знаний
| subject       | предметной рубрике
| title         | заглавию
| udc           | индексу УДК
| year          | году издания

Пример применения построителя с упрощённым формированием запроса:

```c++
irbis::Client client;
client.host = L"irbis.server";
client.port = 5555;
client.username = L"ninja";
client.password = L"i_am_invisible";
client.connect();
auto expression = author(L"Пушкин$").and_(title(L"СКАЗКИ$"));
auto found = client.searchCount(expression);
std::wcout << L"Найдено: " << found << std::endl;
client.disconnect();
```

[Предыдущая глава](chapter4.md) | [Следующая глава](chapter6.md)
